/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.opt.listenomcampagne.services.impl;

import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import fr.generali.accueilclient.commun.exception.AccueilClientBusinessException;
import fr.generali.accueilclient.opt.listenomcampagne.om.ICritereNomCampagne;
import fr.generali.accueilclient.opt.listenomcampagne.om.ICritereNomCampagneIdentifiant;
import fr.generali.accueilclient.opt.listenomcampagne.om.INomIdentifiant;
import fr.generali.accueilclient.opt.listenomcampagne.om.INomIdentifiantSet;
import fr.generali.accueilclient.opt.listenomcampagne.services.IListeNomCampagneService;
import fr.generali.relationclient.marketing.opt.listenomcampagne.DtoNomIdentifiant;
import fr.generali.relationclient.marketing.opt.listenomcampagne.DtoNomIdentifiantSet;
import fr.generali.relationclient.marketing.opt.listenomcampagne.services.IListeNomCampagneWebService;
import fr.generali.relationclient.marketing.opt.listenomcampagne.services.ListeNomCampagneWSBusinessException;
import fr.generali.relationclient.marketing.opt.listenomcampagne.services.ListeNomCampagneWSTechnicalException;

/**
 * @author Holmes Kelly
 */

@Service("listeNomCampagneService")
public class ListeNomCampagneService implements IListeNomCampagneService {

    /**
     * LOGGER
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(ListeNomCampagneService.class);

    /**
     * 
     */
    @Autowired
    @Qualifier("listeNomCampagneMapper")
    private ListeNomCampagneMapper listeNomCampagneMapper;

    /**
     * 
     */
    @Autowired
    @Qualifier("listeNomCampagneWebService")
    private IListeNomCampagneWebService listeNomCampagneWebService;

    /**
     * {@inheritDoc}
     */
    public List<INomIdentifiant> consulterListeNomCampagne(ICritereNomCampagneIdentifiant critereNomCampagneIdentifiant)
        throws AccueilClientBusinessException {

        List<INomIdentifiant> listNomIdentifiants = null;

        if (critereNomCampagneIdentifiant != null) {

            try {
                final List<DtoNomIdentifiant> listDtoNomIdentifiant = 
                    listeNomCampagneWebService.consulterListeNomCampagne(
                                    listeNomCampagneMapper
                                    .mapperCritereNomCampagneIdentifiant2DtoCritereNomCampagneIdentifiant(
                                                    critereNomCampagneIdentifiant));

                if (CollectionUtils.isNotEmpty(listDtoNomIdentifiant)) {

                    listNomIdentifiants =
                                    listeNomCampagneMapper
                                                    .mapperListerNomIdentifiant2INomIdentifiant(listDtoNomIdentifiant);
                }

            } catch (ListeNomCampagneWSTechnicalException e) {

                LOGGER.debug(e.getMessage());
                throw new AccueilClientBusinessException(e.getMessage(), e);

            } catch (ListeNomCampagneWSBusinessException e) {

                LOGGER.debug(e.getMessage());
                throw new AccueilClientBusinessException(e.getMessage(), e);
            }
        }

        return listNomIdentifiants;
    }

    /**
     * {@inheritDoc}
     */
    public INomIdentifiantSet consulterTroisListeNomCampagne(ICritereNomCampagne critereNomCampagne)
        throws AccueilClientBusinessException {

        INomIdentifiantSet nomIdentifiantSet = null;

        if (critereNomCampagne != null) {

            try {
                DtoNomIdentifiantSet dtoNomIdentifiantSet =
                                listeNomCampagneWebService.consulterTroisListeNomCampagne(listeNomCampagneMapper
                                                .mapperCritereNomCampagne2DtoCritereNomCampagne(critereNomCampagne));

                if (dtoNomIdentifiantSet != null) {

                    nomIdentifiantSet =
                                    listeNomCampagneMapper.mapperDtoNomIdentifiantSet2INomIdentifiantSet(
                                                    dtoNomIdentifiantSet);
                }

            } catch (ListeNomCampagneWSTechnicalException e) {

                LOGGER.debug(e.getMessage());
                throw new AccueilClientBusinessException(e.getMessage(), e);

            } catch (ListeNomCampagneWSBusinessException e) {

                LOGGER.debug(e.getMessage());
                throw new AccueilClientBusinessException(e.getMessage(), e);
            }

        }

        return nomIdentifiantSet;
    }
}
